package java_1_24.leetcode;

import java.util.Stack;

/**
 * 字符串/括号匹配问题
 */
public class Num20 {
    public boolean isValid(String s) {
        Stack<Character> stack=new Stack<>();
        //将字符串转为字符输出
        for (int i = 0; i < s.length(); i++) {
            char c=s.charAt(i);//按索引取字符
            //碰到左括号直接入栈
            if(c=='{'||c=='['||c=='('){
                stack.push(c);
            }else{//此时c是右括号
                if(stack.isEmpty()){
                    //右括号是第一个字符，没有相应的左括号匹配-false
                    return false;
                }
                char top=stack.pop();//弹出栈顶左括号
                if(c==')'){
                    if(top!='('){
                        return false;
                    }
                }
                /**也可以写成：
                 * if(c==')'&&top!='('){
                 * return false;
                 *                 }
                 */
                if(c==']'){
                    if(top!='['){
                        return false;
                    }
                }
                if(c=='}'){
                    if(top!='{'){
                        return false;
                    }
                }
            }
        }
        //此时字符串扫描完毕，判断当前栈中是否为空
        return stack.isEmpty();//为空就是匹配，返回true
    }
}
